منو
  • نرمال سازي
  • بهینه سازی موتورهای جستجو محمد زند

نرمال سازي

نرمال سازي: نرمال سازي

نرمال سازي
تصویر مجيد خيرانديش
نرمال سازی بانك های اطلاعاتی
توسط مجيد خيرانديش - شنبه، 4 آذر 1391، 08:25 ب.ظ
 

نرمال سازی بانك های اطلاعاتی
قبل ار مطالعه اين مطلب پيشنهاد می گردد به دليل ضرورت آشنائی خوانندگان با مفاهيم بانك های اطلاعاتی رابطه ای ، مقاله "بانك های اطلاعاتی رابطه ای : مفاهيم و تعاريف " ، مطالعه گردد .
نرمال سازی ( Normalization ) يا به تعبيری هنجار سازی فرآيندی است در رابطه با بانك های اطلاعاتی كه با دو هدف عمده زير انجام می شود :

  • کاهش افزونگی اطلاعات ، به اين معنی که اطلاعات فقط در يک مكان (جدول) ذخيره و در تمام بانک با استفاده از روابط منطقی تعريف شده (RelationShip) قابل دسترسی باشد .

  • حفظ يکپارچگی اطلاعات ، به اين معنی که اعمال تغييرات بر روی اطلاعات ( نظير ايجاد ، بهنگام سازی و حذف ) در يك مكان انجام و به دنبال آن آثار تغييرات در تمام بانك مشاهده گردد . برای روشن شدن مفهوم يکپارچگی بد نيست به مثال ذيل توجه نمائيد :
    فرض كنيد در يك بانك اطلاعاتی دارای دو موجوديت كتاب و نويسنده باشيم . هر يك از موجوديت های فوق دارای المان های اطلاعاتی (Attribute) مختص به خود می باشند . به عنوان نمونه موجوديت "كتاب" دارای المان اطلاعاتی نام نويسنده و موجوديت "نويسنده " دارای المان های اطلاعاتی متعددی نظير نام نويسنده ، آدرس نويسنده و ... باشد . در صورتی كه در موجوديت "کتاب" يک رخداد (رکورد) ايجاد نمائيم بدون اينکه نام نويسنده آن را در موجوديت "نويسنده" ايجاد کرده باشيم ، دچار يک ناهمگونی اطلاعات خواهيم شد .

با توجه به اهداف فوق می توان گفت كه فرآيند نرمال سازی از ناهنجاری های بوجود آمده به دليل بروز تغييرات در بانك جلوگيری خواهد نمود . با اعمال فرآيند نرمال سازی ، يك بانك اطلاعاتی كارآ و مطمئن را خواهيم داشت .
فرآيند نرمال سازی ، فرم های متفاوتی دارد كه انواع متداول آن به شرح ذيل است :

  • فرم اول نرمال سازی 1NF

  • فرم دوم نرمال سازی 2NF

  • فرم سوم نرمال سازی 3NF

  • فرم بويس کد نرمال سازی BCNF

  • فرم چهارم نرمال سازی 4NF

فرم اول نرمال 1NF
موجوديت و يا جدولی در فرم اول نرمال است كه تمامی المان های اطلاعاتی آن ( منظور Attribute است ) يكتا و يا اصطلاحا" atomic باشند . برای روشن شدن اين موضوع فرض كنيد دارای موجوديتی با نام "فاكتور فروش " باشيم .

فاكتور فروش

شماره فاکتور(کليد اصلی)
تاريخ فاکتور
کد مشتری
نام مشتری
کالای 1
تعداد کالای 1
قيمت واحد کالای 1
.
.
.
کالای n
تعداد کالای n
قيمت واحد کالای n

با مشاهده موجوديت فوق متوجه اين موضوع خواهيم شد كه المان های كالا ، تعداد كالا و قيمت واحد كالا بيش از يك مرتبه در موجوديت وجود داشته و اصطلاحا" يك گروه تكرار را تشكيل می دهند . برای اجرای مدل فيزيكی اين موجوديت ناچار خواهيم بود در طراحی جدول آرايه ای به طول ثابت ( به عنوان نمونه با ده عضو ) تعريف و در آن به ترتيب كالای 1 تا 10 را تعريف نمائيم .

مشکل : طراحی فوق ما را با دو مشکل عمده روبرو خواهد ساخت : اول اين كه کارائی بانک اطلاعاتی پائين خواهد آمد (اگر در آينده تعداد کالاهای فاکتور فروش بيش از 10 کالا باشد ، آنگاه مجبور خواهيم بود طراحی جدول مربوطه و متعاقب آن نرم افزارهائی که از آن استفاده می كنند را تغيير دهيم ) و مشکل دوم اين كه بسياري از فاکتورها لزوما" دارای 10 کالا نيستند و بنابراين محتوی بسياری از فيلدها در جدول فوق خالی (داراي ارزش Null) خواهد ماند و حجم زيادی از فضای ديسک هدر خواهد رفت .

راه حل : برای حل اين مشکل کافی است تمامی گروه های تکرار و يا آرايه ها را از موجوديت خارج کرده و به موجوديت ديگری منتقل نمائيم . در چنين مواردی ، كليد اصلی موجوديت اول را به عنوان بخشی از كليد اصلی موجوديت جديد قرار داده و با تلفيق يكی ديگر از آيتم های اطلاعاتی موجوديت جديد كه تضمين كننده يكتا بودن ركوردهای آن موجوديت ( جدول ) است ، كليد اصلی موجوديت ايجاد می گردد . بدين ترتيب ، يك ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلی موجوديت پدر برقرار خواهد شد .
مجددا" به موجوديت "فاكتور فروش " مثال قبل پس از تبديل به فرم اول نرمال توجه نمائيد :

رديف های فاكتور فروش

 



ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلی موجوديت پدر
(فاكتور فروش)

فاكتور فروش

شماره فاکتور(قسمت اول کليد اصلی)
کالا (قسمت دوم کليد اصلی)
تعداد
قيمت واحد

 

شماره فاکتور(کليد اصلی)
تاريخ فاکتور
کد مشتری
نام مشتری

به طور خلاصه می توان گفت كه هدف از فرم اول نرم سازی حذف گروه های تكرار و آرايه ها از موجوديت يا جدول است . فرآيند فوق ، می بايست بر روی تمامی موجوديت های بانك اطلاعاتی اعمال گردد تا بتوان گفت بانك اطلاعاتی نرمال شده در فرم اول است .

فرم دوم نرمال 2NF
موجوديتی در فرم دوم نرمال است که اولا" در فرم اول نرمال باشد و ثانيا" تمامی آيتم های (Attribute) غير کليدی آن وابستگی تابعی به تمام کليد اصلی‌ موجوديت داشته باشند نه به بخشی از آن .همانگونه كه از تعريف فوق استنباط می گردد ، فرم دوم نرمال سازی در خصوص موجوديت هائی بررسی و اعمال می شود كه دارای كليد اصلی مركب هستند ( بيش از يك جزء ) . بنابراين در مثال فوق موجوديت "فاكتور فروش " به خودی خود در فرم دوم نرمال است ولی موجوديت "رديف های فاكتور فروش " كه دارای كليد اصلی مركب است ، نياز به بررسی دارد .

مشکل : در صورتی كه موجوديت در فرم دوم نرمال نباشد ، آنگاه با تغيير اطلاعات قسمت های غيروابسته به تمام كليد ، اين تغييرات در يك ركورد اعمال می شود ولی تاثيری بر روی ساير ركوردها و يا جداول نخواهد داشت . در مثال فوق با تغيير محتوی قيمت واحد در موجوديت "فاكتور فروش " ، قيمت واحد كالا در يك فاكتور فروش اصلاح می گردد اما در ساير فاكتورها اعمال نخواهد شد .

راه حل : برای حل اين مشکل کافی است موجوديت جديدی ايجاد نمائيم و کليد اصلی آن را برابر با آن بخش از کليد اصلی موجوديت مورد بررسی که دارای المان های وابسته به آن است قرار دهيم ، سپس تمام المان های اطلاعاتی وابسته تابعی به اين کليد را از موجوديت مورد بررسی خارج کرده و به موجوديت جديد منتقل نمائيم . در اين حالت بين موجوديت جديد ايجاد شده و موجوديت نرمال شده ، بر اساس کليد اصلی موجوديت جديد ايجاد شده يک ارتباط پدر فرزندی تعريف خواهد شد . دقت کنيد که بر عکس نرمال سازی فرم اول ، در اين جا موجوديت موردبررسی فرزند بوده و موجوديت جديد پدر خواهد بود .
به مثال فوق برمی گرديم و فرم دوم نرمال سازی را بر روي آن اعمال می نمائيم . موجوديت "فاکتور فروش" دارای کليد مرکب نيست پس در فرم دوم نرمال بوده و نياز به بررسی ندارد ، اما موجوديت "رديف های فاکتور فروش" نياز به بررسی دارد . در اين موجوديت آيتم اطلاعاتی "قيمت واحد" وابستگی تابعي به آيتم کالا دارد که بخشی از کليد است نه کل کليد ، پس لازم است تا اين موجوديت را تبديل به فرم دوم نرمال نمائيم . بدين منظور موجوديتی به نام "کالا" ايجاد کرده ، کليد اصلی آن را برابر کالا قرار داده و آيتم قيمت واحد را از موجوديت رديف های فاکتور فروش خارج نموده و به اين موجوديت منتقل می نمائيم. مثال فوق پس از تبديل به فرم دوم نرمال به شکل ذيل خواهد بود :

رديف های فاكتور فروش

 



ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلی موجوديت پدر (فاكتور فروش)

فاكتور فروش

شماره فاکتور(قسمت اول کليد اصلی)
کالا (قسمت دوم کليد اصلی)
تعداد

 

شماره فاکتور(کليد اصلی)
تاريخ فاکتور
کد مشتری
نام مشتری

 

ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلی موجوديت پدر (كالا)

 

كالا

کالا (کليد اصلی)
قيمت واحد

فرم سوم نرمال 3NF
موجوديت و يا جدولی در فرم سوم نرمال است که اولا" در فرم دوم نرمال بوده و ثانيا" تمام آيتم های غير کليد آن وابستگی تابعی به کليد اصلی داشته باشند ، نه به يک آيتم غير کليد .

مشکل : در صورتی كه موجوديتی در فرم سوم نرمال نباشد ، آنگاه با تغيير آيتم يا آيتم های اطلاعاتی غير وابسته به کليد اصلی در يک رکورد، تغييرات در ساير رکوردها اعمال نخواهد شد و دچار دوگانگی اطلاعات خواهيم شد (مثلا" يک مشتري با دو نام متفاوت) .

راه حل : کافی است آيتم های غير کليدی به هم وابسته را به موجوديت جديدی منتقل و کليد اصلی موجوديت جديد را تعيين نمائيم ، آنگاه کليد اصلی موجوديت جديد را در موجوديت نرمال شده به عنوان يک کليد خارجی (Foreign Key) در نظر گرفت . در موجوديت "فاکتور فروش" مثال فوق آيتم نام مشتری وابستگی تابعی به آيتم کد مشتری دارد که خود يک آيتم غير کليد است بنابر اين بايد نرمال سازی فرم سوم در خصوص آن اعمال شود . شکل ذيل نحوه انجام اين كار را نشان می دهد :

رديف های فاكتور فروش

 



ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلی موجوديت پدر (فاكتور فروش)

فاكتور فروش

شماره فاکتور(قسمت اول کليد اصلی)
کالا (قسمت دوم کليد اصلی)
تعداد

 

شماره فاکتور(کليد اصلی)
تاريخ فاکتور
کد مشتری (کليد خارجی)

ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلی موجوديت پدر (كالا)

ارتباط بين موجوديت پدر
( مشتری ) و فرزند بر اساس كليد خارجی

 

كالا

مشتری

کالا (کليد اصلی)
قيمت واحد

کدمشتري (کليد اصلی)
نام مشتری

فرم بويس کد نرمال BCNF
فرم بويس کد دارای مفهوم جامع تری نسبت به فرم دوم و سوم نرمال است . در فرم دوم و سوم نرمال بحث بر سر وابستگی تابعی آيتم های غير کليدی به کليد اصلی است . اما در فرم بويس کد ، موجوديتی در فرم بويس کد نرمال است که اولا" در فرم اول نرمال بوده و ثانيا" تمام المان های غير کليدی آن کاملا" وابسته تابعی به يک کليد باشند و نه چيز ديگر . نکته حائز اهميت در اين فرم اين است که بحث بر سر وابستگي تابعی با يک کليد است نه فقط کليد اصلی. مفهوم فوق در خصوص موجوديت هائی که دارای چندين کليد هستند (Alternate Key) مطرح می شود .

فرم چهارم نرمال 4NF
اين فرم در خصوص موجوديت هائی است که ارتباط بين المان های آن يک ارتباط چند ارزشه و يا چند به چند باشد . به عنوان مثال ، موجوديت کلاس درس می تواند شامل چندين دانش آموز و چندين معلم باشد. در چنين مواردی ارتباط بين معلم و دانش آموز يک ارتباط چند به چند می باشد . در اين حالت با ايجاد يك موجوديت رابط مابين موجوديت های مذكور، مشکل ارتباط چند به چند حل خواهد شد (بسياری از سيستم های مديريت بانک های رابطه ای نظير MSSQL از رابطه چند به چند پشتيبانی نمی نمايند ، يعنی نمی توان بين دو جدول يک رابطه چند به چند ايجاد نمود). معمولا" تمام المان های موجوديت رابط ايجاد شده بخشی از كليد اصلی است .

خلاصه
نرمال سازی فرم های ديگری نيز دارد که به دليل نادر بودن و خاص بودن آنها در اين مقاله به آنها اشاره نشده است . آنچه در خصوص نرمال سازی عموميت دارد تا فرم سوم آن است ، يعنی در هنگام طراحی بانک های اطلاعاتی حتما" می بايست فرآيند نرمال سازی تا فرم سوم را انجام داد .
فرآيند نرمال سازی يک فرآيند تکراری (Recursive) است يعنی پس از هر مرحله نرمال سازی که منجر به ايجاد موجوديت های جديد می گردد ، فرآيند را بايد از ابتدا تا انتها بر روی موجوديت های تازه ايجاد شده نيز اجرا نمود.

تصویر مجيد خيرانديش
پاسخ: نرمال سازی بانك های اطلاعاتی
توسط مجيد خيرانديش - شنبه، 4 آذر 1391، 08:27 ب.ظ
  نرمال سازی بانك های اطلاعاتی
تصویر جواد محمودي
پاسخ: نرمال سازی بانك های اطلاعاتی
توسط جواد محمودي - شنبه، 4 آذر 1391، 09:38 ب.ظ
  با تشکر .
تصویر سيداحمد بني طبابيدگلي
پاسخ: نرمال سازی بانك های اطلاعاتی
توسط سيداحمد بني طبابيدگلي - پنج شنبه، 9 آذر 1391، 10:44 ب.ظ
  ضمن تشکر از آقای خیر اندیش تصویر زیر هم خلاصه مطالب گفته شده می باشد

تصویر مهدی اسدی قالهری
پاسخ: نرمال سازی بانك های اطلاعاتی
توسط مهدی اسدی قالهری - جمعه، 17 آذر 1391، 07:52 ب.ظ
  با سلام
ممنون ، خوب بود
تصویر مانيا شيراني
پاسخ: نرمال سازی بانك های اطلاعاتی
توسط مانيا شيراني - شنبه، 18 آذر 1391، 10:24 ب.ظ
 

با سلام

ممنون.خیلی مفید بود

تصویر مجيد خيرانديش
پاسخ: نرمال سازی بانك های اطلاعاتی
توسط مجيد خيرانديش - چهار شنبه، 22 آذر 1391، 08:56 ب.ظ
 
این مقاله قسمت زیادی از درس پایگاه داده دانشجویان کامپیوتر را پوشش می دهد و مطالعه آن برای یادگیری این درس ، می تواند بسیار مفید باشد . در این مقاله ، با استفاده از شکلهای گویا و مثالهای ساده و روان ، مباحث این درس به خوبی آموزش داده شده است . ان شاالله که مفید باشد

شامل مباحث :

رابطه بین جداول در پایگاه داده
رابطه یک به یک
روابط یک به چند
روابط چند به چند
آشنایی با JOINدر SQL
Right Join
Full Join
Inner Join

نرمال سازی پایگاه داده
فرم اول نرمال
وابستگی تابعی
فرم دوم نرمال
فرم سوم نرمال
وابستگی با واسطه

http://amir87.persiangig.com/documen...0RELATIONS.pdf
or
LINK

تصویر مجيد خيرانديش
پاسخ: نرمال سازی بانك های اطلاعاتی
توسط مجيد خيرانديش - دوشنبه، 4 دي 1391، 12:18 ق.ظ
  با عرض سلام و خسته نباشید خدمت کلیه دوستان
در صورت هرگونه مشکلی در قسمت نرمال سازی سوالات خود را مطرح نمایید.
با تشکر

25 نظر

  • محمد زند / 10 شب / 5 دی 1395, / جواب

    ارسال آرشیو محتوا

    • محمد زند / 10 شب / 5 دی 1395, / جواب

      محتوای ارسالی از آرشیو 1393

به صفحه اول خوش آمدید